Relatório : Resultados experimentais da válvula proporcional para controle de fluxo de ar em pulmões artificiais.
Introdução
O presente relatório apresenta resultados dos testes de ventilação, bem como os resultados obtidos utilizando a válvula proporcional para controle de fluxo, em 03 de abril de 2023. Os problemas enfrentados e soluções testadas são apresentados na seção seguinte.
Methodologia
A norma ABNT NBR ISO 80601-2-12-2014 especifica a confguração típica do ensaio da precisão das ventilações tipo volume e pressão controlada (VCV e PCV, respectivamente), segundo o esquemático abaixo.
Como atualmente não há mistura com gás rico em oxigênio, o sensor de oxigênio foi dispensado para os ensaios atuais.O esquemático da bancada experimental pode ser visto na figura abaixo:
Todos os ensaios levam em conta resistências, complacências, volumes (VCV) e pressões (PCV) especificados para cada modo de controle ventilatório, conforme as tabelas da norma.
O modelo de sistema respiratório utilizado foi o pulmão de teste de ventilação artificial QuickLung®, que posssui resistências de 5, 20, 50 cmH2O/L/s e complacências de 50, 20, 10 mL/cm H2O. Dessa forma, foi possível realizar os ensaios dos 8 primeiros itens das tabelas de PCV e VCV da norma.
% DADOS (memória)
Warning: Unable to locate a personal folder for $documents\MATLAB
cd 'G:\My Drive\PEB\Dissertação\Experimentos\EXP10abr750ml'
impdasbin('SILENCIOSO', cd, files(i).name, 'CALIBRADOS');
trechos = detciclo('SILENCIOSO','Fluxo [lps]',0.00,1,1,.05);
calcintegral('SILENCIOSO','ON', 'VCOR');
assignin('base',erase(files(i).name,'.bin'),Sinal);
resultados(i,:) = mean(Resultado.Ventilador(:,2:end), 1);
end
ans = 0
ans = 0
ans = 0
ans = 0
ans = 0
ans = 0
ans = 0
ans = 0
ans = 0
ans = 0
ans = 0
ans = 0
ans = 0
ans = 0
ans = 0
ans = 0
Problemas atuais
- Oveshoot maior que 1% em VCV e maior que 2,5 hPa em PCV
- Ventilação PCV instável para resistencias altas e lenta para resistências baixas e o controle não converge em um sistema R5C20.
- Tempos inspiratórios e expiratórios desincronizados
- Volume corrente abaixo do volume .
Solução testada
- Entrada do sinal em rampa.
Resultados
Tabela
Na tabela abaixo encontram-se os resultados dos ensaios realizados segundo a norma, com excessão dos valores de PEEP (pressão expiratória final positiva) que foi 0 cmH2O para todos:
RC = ["R20C10";"R20C20";"R20C20";"R20C50";"R50C10";"R50C20";"R5C20";"R5C50";"R20C10";"R20C20";"R20C20";"R20C50";"R50C10";"R50C20";"R5C20";"R5C50"];
MODO = ["PCV";"PCV";"PCV";"PCV";"PCV";"PCV";"PCV";"PCV";"VCV";"VCV";"VCV";"VCV";"VCV";"VCV";"VCV";"VCV"];
ALVO = [25 ;15 ;25 ;15 ;30;25;25;10;.200;.300;.500;.500;.300;.300;.500;.500];
VariableNames = ["MODO";'RC';'FluxoMax_lps';'FluxoMedio_lps';'Pmax_cmH2O';'Pmin_cmH2O';'FR_cpm';'Tins_s';'Texp_s';'IE';'Vins_ml';'Vexp_ml'];
resultados = [MODO RC resultados];
resultados = array2table(resultados,'VariableNames', VariableNames);
Erro(1:8) = rdivide(ALVO(1:8)- str2double(resultados.Pmax_cmH2O(1:8)),ALVO(1:8))*100;
Erro(9:16) = rdivide(ALVO(9:end) - str2double(resultados.Vins_ml(9:16)),ALVO(9:16))*100;
ERRO = array2table(transpose(Erro),'VariableNames', "ERRO");
resultados = [resultados ERRO];
resultados = movevars(resultados,"ERRO",'After',"RC");
% writetable(resultados,'resultados.xlsx')
resultados
resultados = 16×13 table
| | MODO | RC | ERRO | FluxoMax_lps | FluxoMedio_lps | Pmax_cmH2O | Pmin_cmH2O | FR_cpm | Tins_s | Texp_s | IE | Vins_ml | Vexp_ml |
|---|
| 1 | "PCV" | "R20C10" | -88.5832 | "1.40968" | "0.50584" | "47.1458" | "-0.272253" | "20.2894" | "0.842917" | "2.13583" | "2.6016" | "0.42278" | "0.420979" |
|---|
| 2 | "PCV" | "R20C20" | -59.4913 | "1.00106" | "0.372602" | "23.9237" | "-0.302373" | "20.1847" | "0.998158" | "1.97868" | "1.98254" | "0.372815" | "0.372385" |
|---|
| 3 | "PCV" | "R20C20" | -61.0744 | "1.41295" | "0.565627" | "40.2686" | "-0.264649" | "20.1165" | "1.0045" | "1.98025" | "1.97133" | "0.569571" | "0.568774" |
|---|
| 4 | "PCV" | "R20C50" | -45.4887 | "1.11314" | "0.636786" | "21.8233" | "0.186697" | "20.0549" | "1.00947" | "1.98289" | "1.96429" | "0.64457" | "0.64187" |
|---|
| 5 | "PCV" | "R50C10" | -88.1243 | "1.03212" | "0.326308" | "56.4373" | "-0.272042" | "20.0312" | "0.994342" | "2.00158" | "2.01645" | "0.325036" | "0.32201" |
|---|
| 6 | "PCV" | "R50C20" | -89.4124 | "0.960492" | "0.343776" | "47.3531" | "-0.217826" | "20.3359" | "0.990125" | "1.96762" | "2.00385" | "0.341011" | "0.338213" |
|---|
| 7 | "PCV" | "R5C20" | -84.9976 | "1.82407" | "1.10494" | "46.2494" | "-0.280257" | "20.0045" | "0.951667" | "2.04778" | "2.15191" | "1.05429" | "1.04862" |
|---|
| 8 | "PCV" | "R5C50" | -60.9100 | "1.16949" | "0.794414" | "16.091" | "0.0767489" | "20.1961" | "0.991316" | "1.98224" | "2.01611" | "0.790831" | "0.788728" |
|---|
| 9 | "VCV" | "R20C10" | 12.3580 | "0.229852" | "0.173599" | "18.2823" | "-0.275833" | "20.1245" | "1.00711" | "1.97658" | "1.9627" | "0.175284" | "0.175691" |
|---|
| 10 | "VCV" | "R20C20" | 4.4870 | "0.377846" | "0.283722" | "15.4387" | "-0.268251" | "20.2129" | "1.00687" | "1.96725" | "1.95392" | "0.286539" | "0.286062" |
|---|
| ⋮ |
|---|
Onde,
- MODO - modo ventilatório.
- RC -Resistência e Complacência.
- ERRO - porcentagem de erro da variável controlada com relação ao valor .
- VolIns (ml) - Volume inspirado em mililitros.
- FluxoMax (lpm) - Pico de fluxo em litro por minuto
- Pmax (cmH2O) - Pico de pressão em cmH2O.
- Tins (s) - Tempo inspiratório real.
- Texp (s) - Tempo expiratório real.
- I:E - Razão dos tempos inspiratório e expiratório.
- FR (cpm) - Frequência respiratória em ciclos por minuto.
Curvas
Abaixo encontram-se trechos de curvas de fluxo, pressão de boca e pressão a montante (150 cmH2O), mostrando a resposta do controlador para os diferentes sistemas respiratórios. Os s (volume para VCV e pressão de boca para PCV) estão indicados nos títulos entre parênteses, sendo que cada ciclo tem em média 3 segundos com uma fase inspiratória de aproximadamente 1 segundo.
As curvas completas de todos os ensaios podem ser encontradas no Apêndice A.
Testes VCV
t = [0:1/Configuracao.FrequenciaAmostragem:1/Configuracao.FrequenciaAmostragem*(size(Sinal.Dado(:,1))-1)];
%[0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
plot(t,VCV_R5C50_500ml.Dado(:,1))
title('VCV R5C50 ( 500 ml)')
plot(t,VCV_R5C50_500ml.Dado(:,2))
Sinal = VCV_R20C20_300ml;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
title('VCV R20C20 ( 300 ml)')
Sinal = VCV_R20C50_500ml;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22))-5 t(Trechos(26))-5];
title('VCV R20C50 ( 500 ml)')
Sinal = VCV_R50C10_300ml;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
title('VCV R50C10 ( 300 ml)')
Testes PCV
Sinal = PCV_R5C50_10cmH2O;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
title('PCV R5C50 ( 10 cmH2O)')
Sinal = PCV_R20C20_15cmH2O;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
title('PCV R20C20 ( 15 cmH2O)')
Sinal = PCV_R20C50_15cmH2O;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
title('PCV R20C50 ( 15 cmH2O)')
Sinal = PCV_R50C10_30cmH2O;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
title('PCV R50C10 ( 30 cmH2O)')
Conclusão
-
Apêndice A (curvas completas)
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
% fig.Position(3:4)=[1080,400];
title('VCV R5C50 ( 500 ml)')
Sinal = VCV_R20C50_500ml;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('VCV R20C50 ( 500 ml)')
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('VCV R5C20 ( 500 ml)')
Sinal = VCV_R20C20_500ml;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('VCV R20C20 ( 500 ml)')
Sinal = VCV_R20C20_300ml;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('VCV R20C20 ( 300 ml)')
Sinal = VCV_R50C20_300ml;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('VCV R50C20 ( 300 ml)')
Sinal = VCV_R50C10_300ml;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('VCV R50C10 ( 300 ml)')
Sinal = VCV_R20C10_200ml;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('VCV R20C10 ( 200 ml)')
Sinal = PCV_R5C50_10cmH2O;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('PCV R5C50 ( 10cmH2O)')
Sinal = PCV_R20C50_15cmH2O;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('PCV R20C50 ( 15cmH2O)')
Sinal = PCV_R5C20_25cmH2O;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('PCV R5C20 ( 25cmH2O)')
Sinal = PCV_R20C20_25cmH2O;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('PCV R20C20 ( 25cmH2O)')
Sinal = PCV_R20C20_15cmH2O;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('PCV R20C20 ( 15cmH2O)')
Sinal = PCV_R50C20_25cmH2O;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('PCV R50C20 ( 25cmH2O)')
Sinal = PCV_R50C10_30cmH2O;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('PCV R50C10 ( 30cmH2O)')
Sinal = PCV_R20C10_25cmH2O;
t = [0:.0025:.0025*(size(Sinal.Dado(:,1))-1)];
x = [t(Trechos(22)) t(Trechos(26))];
fig.Position(3:4)=[1080,400];
title('PCV R20C10 ( 25cmH2O)')